关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理

来源:百度知道 编辑:UC知道 时间:2024/05/18 16:38:45
说明:写了一个随机抽题的方法,用于随机抽取access数据库题目,开始时能够正常抽题,正常显示,大概随机抽取20-30题左右,出现上述异常。然后vs2008提示:
private void btnRandom_Click(object sender, EventArgs e)
{
OleDbConnection sqlcon = boperate.getcon();
OleDbDataAdapter dk = new OleDbDataAdapter("select id from 题库表 order by id desc", sqlcon);
DataTable dt = new DataTable();
dk.Fill(dt);
Random rnd = new Random();
int c = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString());//该处提示异常,异常提示附下面。
int b = rnd.Next(0, c);
int d = b + 1;
btnRnd.Text = d.ToString();

OleDbDataReader sqlreadRnd = boperate.getread("select * from 题库表 where id="+btnRnd.Text.Trim()+"");
if (sqlreadRnd.Read() == false)
{
MessageBox.Show("暂无“" + labCheXing.Text + "”类型试题!", "提示", Mes

根据你的异常信息来看是dt(DataTable)的行数为0了,即dk.Fill(dt)没有查询结果为0行。

也许数据库中没数据,不过你说“开始时能够正常抽题,正常显示”,也就是说数据库应该是有数据的。
当然也不排除你作其它操作误删了,所以还是要确认一下。 这点比较好确认,只要你打开看看数据库行了。
如果有数据,那你在后面加sqlcon.Close();sqlreadRnd.Close();试试
每种数据库都会有一个最大连接数,而你Click事件里没有关闭连接数据库的代码,Click一下就连一次数据库,连二三十次不关闭,有可能就会造成“开始正常,后面异常”(瞎猜的,不知对不对)如果是这个原因,你也可以把sqlcon设为全局变量。这样应该也只是连一回数据库

dt.rows.count=0
在此处加一个判断
if(dt.rows.count>0
){
int c = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString());//该处提示异常,异常提示附下面。
}
else

{}

一般是数组操作界限

下标越界!